# include <bits/stdc++.h>
# define N 100005
# define mod 1000000007
using namespace std;
int n,m,x,y;
char s[N];
long long f[1005][32][32];
struct Matrix
{
    long long f[4][4];
    Matrix()
    {
        memset(f,0,sizeof f);
    }
}A,B;
Matrix operator *(Matrix A,Matrix B)
{
    Matrix ans;
    for(int i=0;i<4;i++)
        for(int k=0;k<4;k++)
        {
            long long tmp=A.f[i][k];
            for(int j=0;j<4;j++)
                (ans.f[i][j]+=tmp*B.f[k][j])%=mod;
        }
    return ans;
}
Matrix operator ^(Matrix x,int y)
{
    Matrix ans;
    for(int i=0;i<4;i++)
        ans.f[i][i]=1;
    while(y)
    {
        if(y&1)
            ans=ans*x;
        x=x*x;
        y>>=1;
    }
    return ans;
}
long long get(int n,int m)
{
    memset(f,0,sizeof f);
    f[0][0][0]=1;
    for(int i=1;i<=n;i++)
    {
        int l=0,r=(1<<m)-1;
        for(int j=l;j<=r;j++)
            for(int k=0;k<(1<<m);k++)
                for(int l=0;l<(1<<m);l++)
                    (f[i][j][k]+=f[i-1][l][k^((j*l)&((1<<m)-1))]);
    }
    long long ans=0;
    for(int i=0;i<(1<<m);i++)
        for(int j=0;j<(1<<m);j++)
            ans=(ans+f[n][i][j]*j);
    return ans;
}
long long qpow(long long x,int y)
{
    long long ans=1;
    while(y)
    {
        if(y&1)
            ans=ans*x%mod;
        x=x*x%mod;
        y>>=1;
    }
    return ans;
}
long long a[N];
int main()
{
    freopen("pearl.in","r",stdin);
    freopen("pearl.out","w",stdout);
    cin>>n>>m>>x;
    scanf("%s",s+1);
    for(int i=m;i>=1;i--)
        y=y*2+s[i]-'0';
    if(n<=1000 && m<=5)
    {
        f[0][0][0]=1;
        for(int i=1;i<=n;i++)
        {
            int l=0,r=(1<<m)-1;
            if(i==x)
                l=r=y;
            for(int j=l;j<=r;j++)
                for(int k=0;k<(1<<m);k++)
                    for(int l=0;l<(1<<m);l++)
                        (f[i][j][k]+=f[i-1][l][k^((j*l)&((1<<m)-1))])%=mod;
        }
        long long ans=0;
        for(int i=0;i<(1<<m);i++)
            for(int j=0;j<(1<<m);j++)
                ans=(ans+f[n][i][j]*j)%mod;
        cout<<ans<<endl;
    }
    else if(m==1)
    {
        B.f[0][0]=1;
        B.f[0][2]=1;
        B.f[1][1]=1;
        B.f[1][3]=1;
        B.f[2][0]=1;
        B.f[2][3]=1;
        B.f[3][1]=1;
        B.f[3][2]=1;
        A.f[0][y*2]=1;
        auto ans1=A*(B^(x-1)),ans2=A*(B^(n-x));
        long long ans=((ans1.f[0][0]+ans1.f[0][2])*(ans2.f[0][1]+ans2.f[0][3])+(ans1.f[0][1]+ans1.f[0][3])*(ans2.f[0][0]+ans2.f[0][2]))%mod;
        cout<<ans<<endl;
    }
    return 0;
}